class TypeChecker(object):
    @staticmethod
    def is_bytes(v):
        return isinstance(v, (bytes, bytearray, memoryview))
    @staticmethod
    def not_bytes(v):
        return not TypeChecker.is_bytes(v)
        

    @staticmethod
    def is_str(s):
        return isinstance(s, str)
    @staticmethod
    def not_str(s):
        return not isinstance(s, str)


import unittest
class TestTypeChecker(unittest.TestCase):
    def test_main(self):
        self.assertFalse(TypeChecker.is_str(None))
        self.assertTrue(TypeChecker.not_str(None))

        self.assertTrue(TypeChecker.is_str(''))
        self.assertFalse(TypeChecker.not_str(''))

        self.assertTrue(TypeChecker.is_str('abc'))
        self.assertFalse(TypeChecker.not_str('abc'))

        self.assertTrue(TypeChecker.is_bytes(b'abc'))
        self.assertTrue(TypeChecker.is_bytes(bytes.fromhex('2EF0')))
        self.assertTrue(TypeChecker.is_bytes(bytearray.fromhex('2EF0')))
        self.assertTrue(TypeChecker.is_bytes(memoryview(b'2EF0')))

        self.assertTrue(TypeChecker.not_bytes('abc'))
        self.assertTrue(TypeChecker.not_bytes(None))

